/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package com.qp.smsmarketing.view.mbean;

import com.qp.smsmarketing.dao.OperacaoDAO;
import com.qp.smsmarketing.dao.PapelDAO;
import com.qp.smsmarketing.view.mbean.abstractmbean.AbstractMBean;
import com.qp.smsmarketing.dao.UsuarioDAO;
import com.qp.smsmarketing.entity.OperacaoUsuario;
import com.qp.smsmarketing.entity.Papel;
import com.qp.smsmarketing.entity.Usuario;
import com.qp.smsmarketing.entity.Usuario;
import com.qp.smsmarketing.view.ViewUsuario;
import com.qp.smsmarketing.view.ViewUsuario;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.List;
import javax.swing.AbstractButton;
import javax.swing.ButtonGroup;
import javax.swing.JFrame;
import javax.swing.JOptionPane;

/**
 *
 * @author waldenilson
 */
public class UsuarioMBean extends AbstractMBean {
    private ViewUsuario vUsuario;
    private UsuarioDAO gdao = new UsuarioDAO();
    private Usuario cadUsuario = new Usuario();
    private List<Usuario> lista;
    private int registros;
    
    public void exibirView(ViewUsuario vg)
    {
        buscarCrudUsuario(vg);
        carregarView(vUsuario,vg);
    }

    @Override
    public String jbuttonGroupSelected(ButtonGroup bgGroup) {
        return super.jbuttonGroupSelected(bgGroup);
    }

    public void novoObjeto(ViewUsuario vg)
    {
        vUsuario = vg;
        setCadUsuario(new Usuario());
        vg.getTf_nome().setText("");
        vg.getTf_login().setText("");
        vg.getTf_senha().setText("");
        vg.getTf_senha2().setText("");
        vg.getBt_novo().setEnabled(false);
    }

    public String salvarObjeto(ViewUsuario vg,String role)
    {
        vUsuario = vg;
        String retorno = "error";
        getCadUsuario().setNomeUsuario(vUsuario.getTf_nome().getText());
        getCadUsuario().setLogUsuario(vUsuario.getTf_login().getText());
        getCadUsuario().setSenhaUsuario( new String( vUsuario.getTf_senha().getPassword()) );
        getCadUsuario().setStatusUsuario(vUsuario.getCb_ativo().isSelected());

        // verificações
        if(getCadUsuario().getNomeUsuario().length() < 3
                || getCadUsuario().getLogUsuario().length() <3
                || getCadUsuario().getSenhaUsuario().length() < 3
                || !getCadUsuario().getSenhaUsuario().
                    equals( new String( vUsuario.getTf_senha2().getPassword() ) ))
        {
            retorno = "verify";
            return retorno;
        }

        // adicionar o role do usuario
            PapelDAO pdao = new PapelDAO();
            Papel p = pdao.buscarRegistro(role);
            if(p==null)
            {
                retorno = "role";
                return retorno;
            }
            else
                getCadUsuario().setIdRoleUsuario(p);

            // limpar as operacoesusuario
            if(getCadUsuario().getIdUsuario()!=null)
                if( !gdao.deletarOperacoesUsuarioByUsuario(getCadUsuario().getIdUsuario()) )
                    return retorno;

            // organizar as operacoes de permissoes
                List<OperacaoUsuario> lou = new ArrayList<OperacaoUsuario>();
                OperacaoDAO odao = new OperacaoDAO();
                if(vg.getCbPermissoesUsuarios().isSelected())
                {
                   lou = criarOperacaoUsuario(lou, new OperacaoUsuario(),
                        odao, vg.getCbPermissoesUsuarios().getText());
                }
                if(vg.getCbPermissoesGrupos().isSelected())
                {
                    lou = criarOperacaoUsuario(lou, new OperacaoUsuario(),
                            odao, vg.getCbPermissoesGrupos().getText());
                }
                if(vg.getCbPermissoesContatos().isSelected())
                {
                    lou = criarOperacaoUsuario(lou, new OperacaoUsuario(),
                            odao, vg.getCbPermissoesContatos().getText());
                }
                if(vg.getCbPermissoesMensagens().isSelected())
                {
                    lou = criarOperacaoUsuario(lou, new OperacaoUsuario(),
                            odao, vg.getCbPermissoesMensagens().getText());
                }
                getCadUsuario().setOperacaoUsuarioList(lou);


        if(getCadUsuario().getIdUsuario()==null)
        {
           //JOptionPane.showMessageDialog(null,"salvar");
           
            // verificar se log já está cadastrado
            if( gdao.verifyRegistroByLog(getCadUsuario().getLogUsuario()) )
            {
                retorno = "equallog";
                return retorno;
            }

            if( gdao.salvarObj(getCadUsuario()) )
               retorno = "ok";
        }
        else
        {
                //JOptionPane.showMessageDialog(null,"alterar");
                if( gdao.atualizarDados(getCadUsuario()) )
                    retorno = "ok";
        }
        if(retorno.equals("ok"))
            vg.getBt_novo().setEnabled(true);
        
        return retorno;
    }

    public List<OperacaoUsuario> criarOperacaoUsuario
            (List<OperacaoUsuario> l,OperacaoUsuario ou,OperacaoDAO odao,String permissao)
    {
        ou.setUsuarioOperacaoUsuario(getCadUsuario());
        ou.setOperacaoOperacaoUsuario(
        odao.buscarRegistro(permissao));
        l.add(ou);
        return l;
    }

    public void buscarCrudUsuario(ViewUsuario vg)
    {
        vUsuario = vg;
        lista = gdao.buscarTodos();
        int x=0;
        for(Usuario cont : lista)
        {
            vUsuario.getTableUsuario().setValueAt(cont.getIdUsuario().toString(),x,0);
            vUsuario.getTableUsuario().setValueAt(cont.getNomeUsuario(),x,1);
            vUsuario.getTableUsuario().setValueAt(cont.getLogUsuario(), x, 2);
            x++;
        }
        setRegistros(x);
        //vUsuario.setTableUsuario( ocultarColuna(vUsuario.getTableUsuario(),2) );
    }

    public void selecionarRegistro(ViewUsuario v)
    {
        vUsuario = v;
        int i = vUsuario.getTableUsuario().getSelectedRow();
        //buscarCrudUsuario(v);
        setRegistros(gdao.buscarTodos().size());
        if((i+1) <= getRegistros())
        {
            setCadUsuario((Usuario)gdao.buscarRegistro
                    (Integer.parseInt(vUsuario.getTableUsuario().getValueAt(i,0).toString())));
            vUsuario.getTf_nome().setText(getCadUsuario().getNomeUsuario());
            vUsuario.getTf_login().setText(getCadUsuario().getLogUsuario());
            vUsuario.getTf_senha().setText(getCadUsuario().getSenhaUsuario());
            vUsuario.getTf_senha2().setText(getCadUsuario().getSenhaUsuario());
            vUsuario.getCb_ativo().setSelected(getCadUsuario().getStatusUsuario());
            
//            if(getCadUsuario().getIdRoleUsuario()!=null
//                    && getCadUsuario().getIdRoleUsuario().getNomeRole()!=null)
//            {
                Enumeration<AbstractButton> elements = vUsuario.getBgPapeis().getElements();
                //Coloca todos os elementos em uma lista
                List<AbstractButton> listaButtons = Collections.list(elements);
                //LaÃ§o para percorrer todos os JRadioButtons e verificar qual estÃ¡ selecionado
                for (int x = 0; x < listaButtons.size(); x++) {
                    //if (vUsuario.getBgPapeis().isSelected(listaButtons.get(i).getModel())) {
//                          System.out.println(getCadUsuario().getIdRoleUsuario().getNomeRole()+"->"+
//                                  listaButtons.get(x).getText());
                    
                    if(getCadUsuario().getIdRoleUsuario().getNomeRole().
                              equals(listaButtons.get(x).getText()))
                               {
//                          System.out.println(getCadUsuario().getIdRoleUsuario().getNomeRole()+"->"+
//                                  listaButtons.get(x).getActionCommand());
                          vUsuario.getBgPapeis().
                                  setSelected(listaButtons.get(x).getModel(), true);
                      }
                    //}
                }

                // MOSTRAR OS CHECKBOX-PERMISSOES HABILITADOS
                for(OperacaoUsuario ou : getCadUsuario().getOperacaoUsuarioList())
                {
                    if(ou.getOperacaoOperacaoUsuario().getNomeOperacao().
                            equals(vUsuario.getCbPermissoesGrupos().getText()))
                        vUsuario.getCbPermissoesGrupos().setSelected(true);

                    if(ou.getOperacaoOperacaoUsuario().getNomeOperacao().
                            equals(vUsuario.getCbPermissoesContatos().getText()))
                        vUsuario.getCbPermissoesContatos().setSelected(true);

                    if(ou.getOperacaoOperacaoUsuario().getNomeOperacao().
                            equals(vUsuario.getCbPermissoesMensagens().getText()))
                        vUsuario.getCbPermissoesMensagens().setSelected(true);

                    if(ou.getOperacaoOperacaoUsuario().getNomeOperacao().
                            equals(vUsuario.getCbPermissoesUsuarios().getText()))
                        vUsuario.getCbPermissoesUsuarios().setSelected(true);
                }
//            }
                vUsuario.getBt_novo().setEnabled(true);
        }
        else
            novoObjeto(v);
    }

    /**
     * @return the cadUsuario
     */
    public Usuario getCadUsuario() {
        return cadUsuario;
    }

    /**
     * @param cadUsuario the cadUsuario to set
     */
    public void setCadUsuario(Usuario cadUsuario) {
        this.cadUsuario = cadUsuario;
    }

    /**
     * @return the registros
     */
    public int getRegistros() {
        return registros;
    }

    /**
     * @param registros the registros to set
     */
    public void setRegistros(int registros) {
        this.registros = registros;
    }

}
